package com.example.ai.mapper;


import com.example.ai.entity.Good;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * 商品管理Mapper接口
 * 提供商品信息的CRUD操作及商品-供应商关联管理
 *
 * @author czwa
 */
@Mapper
public interface GoodMapper {
    /**
     * 分页条件查询商品列表
     *
     * @param good 查询条件封装对象（包含分页信息）
     * @return 符合条件的商品列表
     */
    List<Good> getAllGood(Good good);

    /**
     * 新增商品信息
     *
     * @param good 商品实体对象
     */
    @Insert("insert into good (name,price,stock,image,description, create_time, creator, update_time, updator) values " +
            "(#{name},#{price},#{stock},#{image},#{description},#{createTime},#{creator},#{updateTime},#{updater})")
    void add(Good good);

    /**
     * 根据ID查询商品详情（包含供应商信息）
     *
     * @param id 商品ID
     * @return 商品实体对象（包含供应商名称）
     */
    @Select("select g.id, g.name, g.stock, g.price, g.image, g.status, g.description,s.name as supplyName from good g left join good_supply gs on g.id=gs.good_id left join wa_coffee.supply s on gs.supply_id = s.id" +
            " where g.id=#{id}")
    Good getById(int id);

    /**
     * 更新商品信息
     *
     * @param good 商品实体对象（需包含ID）
     */
    @Update("update good set name=#{name},price=#{price},stock=#{stock},image=#{image},description=#{description},updator=#{updater},update_time=#{updateTime} where id=#{id}")
    void update(Good good);

    /**
     * 根据ID删除商品
     *
     * @param id 商品ID
     */
    @Delete("delete from good where id=#{id}")
    void delete(int id);

    /**
     * 检查供应商是否首次出现
     *
     * @param supplyName 供应商名称
     * @return 存在记录返回1，否则返回0
     */
    @Select("select count(id) from supply where name=#{supplyName} ")
    int supplyIsFirstAppear(String supplyName);

    /**
     * 新增供应商
     *
     * @param supplyName 供应商名称
     */
    @Insert("insert into  supply (name) values (#{supplyName})")
    void addSupply(String supplyName);

    /**
     * 根据商品名称获取商品ID
     *
     * @param name 商品名称
     * @return 商品ID
     */
    @Select("select id from good where name=#{name}")
    int getId(String name);

    /**
     * 根据供应商名称获取供应商ID
     *
     * @param supplyName 供应商名称
     * @return 供应商ID
     */
    @Select("select id from supply where name=#{supplyName}")
    int getSupplyId(String supplyName);

    /**
     * 建立商品-供应商关联关系
     *
     * @param goodId   商品ID
     * @param supplyId 供应商ID
     */
    @Insert("insert into  good_supply (good_id, supply_id) VALUES (#{goodId},#{supplyId})")
    void addGoodSupply(int goodId, int supplyId);

    /**
     * 删除商品-供应商关联关系
     *
     * @param id 商品ID
     */
    @Delete("delete from good_supply where good_id=#{id}")
    void deleteGoodToSupply(int id);

    /**
     * 获取所有商品列表（不含供应商信息）
     *
     * @return 商品列表
     */
    @Select("select g.id, g.name, g.stock, g.price, g.image,g.description from good g")
    List<Good> getAll();
}